package com.quan.commons.core.configuration.mybatisplus;


import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.handler.TenantLineHandler;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.LongValue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import java.util.Arrays;
import java.util.List;


/**
 * MyBatisPlus 配置类
 */
@Configuration
@EnableTransactionManagement // 开启事务
public class MybatisPlusConfig {

    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();

        //interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
        //    @Override
        //    public Expression getTenantId() {
        //        // 设置当前租户ID，实际情况你可以从cookie、JWT、或者缓存中拿都行
        //        return new LongValue(1);
        //    }
        //
        //    // 这是 default 方法,默认返回 false 表示所有表都需要拼多租户条件
        //    @Override
        //    public boolean ignoreTable(String tableName) {
        //
        //        //// 过滤一些不需要加租户的表
        //        //List<String> tableNameList = Arrays.asList("sys_user");
        //        //if (tableNameList.contains(tableName)){
        //        //    return true;
        //        //} else {
        //        //    return false;
        //        //}
        //
        //        return !"user".equalsIgnoreCase(tableName);
        //    }
        //}));

        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));

        return interceptor;
    }

    //@Bean
    //public ConfigurationCustomizer configurationCustomizer() {
    //    return configuration -> configuration.setUseDeprecatedExecutor(false);
    //}

    /**
     * 配置分页插件
     * @return
     */
    //@Bean
    //public PaginationInterceptor paginationInterceptor() {
    //    PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
    //    // 设置请求的页面大于最大页后操作， true调回到首页，false 继续请求  默认false
    //    paginationInterceptor.setOverflow(true);
    //    // 设置最大单页限制数量，默认 500 条，-1 不受限制
    //    // 开启 count 的 join 优化,只针对部分 left join
    //    paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
    //
    //    return paginationInterceptor;
    //}



}
